#include <myhead.h>
#include "page.h"

static int upload_start(char* src,char* dest){
	if(access(src, F_OK)!=0){
		print_red2("本地文件不存在,文件名", src);
		return -1;
	}
	pkg_t* retPkg=pkg_create();
	char sendBuf[256]={0};
	char errmsg[1024]={0};
	int len=pkg_pack_buf(sendBuf, MSG_TYPE_UPLOAD_START, 2, (char*)client_loginname(), dest);
	int ret=client_sendAndRet(sendBuf, len, retPkg, errmsg);              
	if(ret == 0 && strcmp("OK", pkg_get(retPkg, 0))==0){
		pkg_free(retPkg);
		return 0;
	}
	print_red("上传文件 开始帧 发送失败");
	pkg_free(retPkg);
	return -1;
}

static int upload_content(char* src, char* dest){
	//2、发送文件(文件内容)
	int fd=open(src, O_RDONLY);
	ssize_t cnt=0;
	long total=0;
	char buf[1024]={0};
	char errmsg[1024]={0};
	int i=0;
	while((cnt=read(fd, buf, sizeof(buf)))>0){
		//打包发送
		pkg_t* retPkg=pkg_create();
		char sendBuf[2048]={0};

		/*
		//开始
		char buf1[30]={0};
		sprintf(buf1,"%ld",total);
		//大小
		char buf2[30]={0};
		sprintf(buf2,"%ld",cnt);
		*/

		int len=pkg_pack_buf(sendBuf, MSG_TYPE_UPLOAD_CONTENT, 2,(char*)client_loginname(), dest);
		printf("AAAAAA:\n");
		print_hex(sendBuf, len, 16);
		//
		len=pkg_appendByteArr(sendBuf, buf, cnt);
		printf("BBBBBB:\n");
		print_hex(sendBuf, len, 16);
		//
		int ret=client_sendAndRet(sendBuf, len, retPkg, errmsg);              
		total+=cnt;
		i++;
		if(ret != 0 || strcmp("OK", pkg_get(retPkg, 0))!=0){
			printf("上传文件 文件内容 发送失败 第[%d]包，读取cnt=[%ld],发送len[%d],总发送total=[%ld]\n", i, cnt,len,total);
		}
		pkg_free(retPkg);
	}
	close(fd);
	return 0;
}

static int upload_end(char* src, char* dest){
	pkg_t* retPkg=pkg_create();
	char sendBuf[256]={0};
	char errmsg[1024]={0};
	int len=pkg_pack_buf(sendBuf, MSG_TYPE_UPLOAD_END, 2, (char*)client_loginname(), dest);
	int ret=client_sendAndRet(sendBuf, len, retPkg, errmsg);              
	if(ret == 0 && strcmp("OK", pkg_get(retPkg, 0))==0){
		pkg_free(retPkg);
		return 0;
	}
	print_red("上传文件 结束帧 发送失败");
	pkg_free(retPkg);
	return -1;
}


void* page_to_myssh_upload(){
	//暂时关闭心跳
	client_stop_heart();
	print_nav2("首页/服务器远程控制功能/上传文件", (char*)client_loginname());
	printf("[输入本地文件名]:");
	char src[128]={0};
	fgets(src, sizeof(src), stdin);
	src[strlen(src)-1]=0;
	printf("[输入服务端存储文件名，文件将存储在 file/用户名 目录下]:");
	char dest[128]={0};
	fgets(dest, sizeof(dest), stdin);
	dest[strlen(dest)-1]=0;

	printf("客户端，src=[%s],dest=[%s]\n", src, dest);

	//1、发送上传文件开始指令(文件名称，文件大小, 当前用户名)
	//打开文件，获取文件大小
	if(upload_start(src,dest)!=0 || upload_content(src, dest)!= 0 || upload_end(src,dest)!=0){
		print_red("文件上传失败");
		return page_to_myssh_index;
	}
	print_green("文件上传完成");
	return page_to_myssh_index;
}

